home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #6 / Amiga Plus CD - 2004 - No. 06.iso / AmiSoft / Misc / emu / rotate.lha / rotate.cpp < prev    next >
C/C++ Source or Header  |  1999-08-19  |  4KB  |  156 lines

  1. //
  2. // Rotate V1
  3. //
  4. // K.Wilkins July97
  5. //
  6. // V1 - Creation
  7. //
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. // Bytes should be 8-bits wide
  14. typedef signed char SBYTE;
  15. typedef unsigned char UBYTE;
  16.  
  17. // Words should be 16-bits wide
  18. typedef signed short SWORD;
  19. typedef unsigned short UWORD;
  20.  
  21. // Longs should be 32-bits wide
  22. typedef long SLONG;
  23. typedef unsigned long ULONG;
  24.  
  25. typedef struct
  26. {
  27.   UBYTE   magic[4];
  28.   UWORD   page_size_bank0;
  29.   UWORD   page_size_bank1;
  30.   UWORD   version;
  31.   UBYTE   cartname[32];
  32.   UBYTE   manufname[16];
  33.   UBYTE   rotation;
  34.   UBYTE   spare[5];
  35. }LYNX_HEADER_NEW;
  36.  
  37. #define CART_NO_ROTATE          0
  38. #define CART_ROTATE_LEFT        1
  39. #define CART_ROTATE_RIGHT       2
  40.  
  41. void usage(void)
  42. {
  43.      fprintf(stderr,"Rotate - A utility to set the rotate flag of LNX Images V5\n");
  44.      fprintf(stderr,"----------------------------------------------------------\n");
  45.      fprintf(stderr,"K.Wilkins July 1997\n\n");
  46.      fprintf(stderr,"USAGE:  rotate <left/right/default <file>\n");
  47.      fprintf(stderr,"\n");
  48.      fprintf(stderr,"This utility will patch the LNX header and add in the new\n");
  49.      fprintf(stderr,"rotation flag so that you can make games start with the screen\n");
  50.      fprintf(stderr,"in the correct orientation.\n");
  51.      fprintf(stderr,"Any existing images you have will still work correctly and\n");
  52.      fprintf(stderr,"will only need modifiying if you wish to take advantage of\n");
  53.      fprintf(stderr,"the rotate feature.\n");
  54.      fprintf(stderr,"\n");
  55.      fprintf(stderr,"Examples:\n");
  56.      fprintf(stderr,"rotate left gauntlet.lnx\n");
  57.      fprintf(stderr,"rotate default batman.lnx\n");
  58.      fprintf(stderr,"\n");
  59. }
  60.  
  61. void main(int argc, char *argv[])
  62. {
  63.     FILE *filein,*fileout;
  64.     LYNX_HEADER_NEW header;
  65.     UBYTE data=0;
  66.     char infile[256];
  67.     char outfile[256];
  68.     UBYTE rotation;
  69.     char rotatestr[256];
  70.     SLONG argno=0,loop=0;
  71.  
  72.     if(argc!=3)
  73.     {
  74.         fprintf(stderr,"ERROR: Invalid number of arguments\n\n");
  75.         usage();
  76.         exit(-1);
  77.     }
  78.  
  79.    rotation=CART_NO_ROTATE;
  80.  
  81.    strcpy(rotatestr,argv[1]);
  82.    strcpy(infile,argv[2]);
  83.    strcpy(outfile,"rotate.tmp");
  84.  
  85.  
  86.    loop=0;
  87.    while(rotatestr[loop])
  88.    {
  89.        rotatestr[loop]=toupper(rotatestr[loop]);
  90.        loop++;
  91.    }
  92.  
  93.    if(strcmp(rotatestr,"LEFT")==0) rotation=CART_ROTATE_LEFT;
  94.    else if(strcmp(rotatestr,"RIGHT")==0) rotation=CART_ROTATE_RIGHT;
  95.    else if(strcmp(rotatestr,"DEFAULT")==0) rotation=CART_NO_ROTATE;
  96.    else if(strcmp(rotatestr,"")!=0)
  97.    {
  98.      fprintf(stderr,"\nERROR: Invalid rotation paramter only LEFT/RIGHT/DEFAULT are valid\n");
  99.      exit(-1);
  100.    }
  101.  
  102.    if((filein=fopen(infile,"rb"))==NULL)
  103.    {
  104.      fprintf(stderr,"\nERROR: Couldn't open %s for reading\n",infile);
  105.      exit(-1);
  106.    }
  107.  
  108.    if(!fread(&header,sizeof(LYNX_HEADER_NEW),1,filein))
  109.    {
  110.      fprintf(stderr,"\nERROR: Couldn't read header\n");
  111.      fclose(filein);
  112.      exit(-1);
  113.    }
  114.  
  115.    if(header.magic[0]!='L' || header.magic[1]!='Y' || header.magic[2]!='N' || header.magic[3]!='X')
  116.    {
  117.      fprintf(stderr,"\nERROR: %s is not an LNX format file\n",infile);
  118.      fclose(filein);
  119.      exit(-1);
  120.    }
  121.  
  122.    header.rotation=rotation;
  123.  
  124.    if((fileout=fopen(outfile,"wb"))==NULL)
  125.    {
  126.      fprintf(stderr,"\nERROR: Couldn't open %s for writing\n",outfile);
  127.      fclose(filein);
  128.      exit(-1);
  129.    }
  130.  
  131.    if(!fwrite(&header,sizeof(LYNX_HEADER_NEW),1,fileout))
  132.    {
  133.      fprintf(stderr,"\nERROR: Couldn't write header\n");
  134.      fclose(filein);
  135.      fclose(fileout);
  136.      unlink(outfile);
  137.      exit(-1);
  138.    }
  139.  
  140.    while(fread(&data,sizeof(UBYTE),1,filein))
  141.    {
  142.       fwrite(&data,sizeof(UBYTE),1,fileout);
  143.    }
  144.  
  145.  
  146.    fclose(filein);
  147.    fclose(fileout);
  148.  
  149.    unlink(infile);
  150.    rename(outfile,infile);
  151.    fprintf(stdout,"DONE: File modified");
  152. }
  153.  
  154.    
  155.  
  156.